#ifndef _M_UTIL_H__
#define _M_UTIL_H__
/*使用工具类的实现：
  1.获取系统时间
  2.判断文件是否存在
  3.获取文件所在路径
  4.创建目录
*/
#include <iostream>
#include <ctime>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <memory>
namespace xglog
{
  namespace util
  {
    class Date
    {
    public:
      static size_t now()
      {
        return (size_t)time(nullptr);
      }
    };
    class File
    {
    public:
      static bool exists(const std::string &pathname) // 判断文件是否存在
      {
        struct stat st;
        if (stat(pathname.c_str(), &st) < 0)
        {
          return false;
        }
        else
          return true;
        // return (access(pathname.c_str(),F_OK) == 0);//只适用于linux操作系统下
      }
      static std::string path(const std::string &pathname) // 获取文件路径
      {
        size_t pos = pathname.find_last_of("/\\");
        if (pos == std::string ::npos)
          return ".";
        return pathname.substr(0, pos + 1);
      }
      static void createDirctory(const std::string &pathname) // 创建目录
      {
        //./abc/dce/ldg
        // std::cout << pathname << std::endl;
        size_t pos = 0, idx = 0;

        while (idx < pathname.size())
        {
          pos = pathname.find_first_of("/\\", idx); // 从开头找\如果找不到，创建目录
          if (pos == std::string::npos)
          {
            mkdir(pathname.c_str(), 0777);
          }
          // 如果找到了，截取父级目录
          std::string parent_dir = pathname.substr(0, pos + 1);
          // 如果父级目录存在，则跳过
          if (exists(parent_dir) == true)
          {
            idx = pos + 1;
            continue;
          }
          mkdir(parent_dir.c_str(), 0777);
          idx = pos + 1;
        }
      }
    };
  }
}
#endif